4 * This file is PHPUnit autoload file for PhpStorm IDE and other JetBrains IDEs.
6 * This file should be set in `Languages and frameworks > PHP > PhpUnit`
7 * select `Use Composer autoloader` and set `Path to script` to `<path to this file>`.
8 * After that, tests can be run in PhpStorm using Right-click > Run or `Ctrl + Shift + F10`.
9 * Also, tests can be run with debugger very easily.
11 * This file basically does almost the same thing as `tests/phpunit/phpunit.php`, except that all
12 * code is going to be executed inside some function, so some hacks needed to make old code to be
13 * executed as if it was executed on top of the execution stack.
15 * PS: Mostly it is copy-paste from `phpunit.php` and `doMaintenance.php`.
20 // Set a flag which can be used to detect when other scripts have been entered
21 // through this entry point or not.
22 use MediaWiki\MediaWikiServices
;
26 $argv[2] = getenv( 'WIKI_NAME' ) ?
: 'wiki';
28 require_once __DIR__
. "/phpunit.php";
30 // Get an object to start us off
31 /** @var Maintenance $maintenance */
32 $maintenance = new PHPUnitMaintClass();
34 // Basic sanity checks and such
35 $maintenance->setup();
37 // We used to call this variable $self, but it was moved
38 // to $maintenance->mSelf. Keep that here for b/c
39 $self = $maintenance->getName();
41 # Get profiler configuraton
43 if ( file_exists( "$IP/StartProfiler.php" ) ) {
44 require "$IP/StartProfiler.php";
46 # Start the autoloader, so that extensions can derive classes from core files
47 require_once "$IP/includes/AutoLoader.php";
49 $requireOnceGlobalsScope = function ( $file ) use ( $self ) {
50 foreach ( array_keys( $GLOBALS ) as $varName ) {
51 eval( sprintf( 'global $%s;', $varName ) );
57 $definedVars = get_defined_vars();
58 foreach ( $definedVars as $varName => $value ) {
59 eval( sprintf( 'global $%s; $%s = $value;', $varName, $varName ) );
63 // Some other requires
64 $requireOnceGlobalsScope( "$IP/includes/Defines.php" );
65 $requireOnceGlobalsScope( "$IP/includes/DefaultSettings.php" );
66 $requireOnceGlobalsScope( "$IP/includes/GlobalFunctions.php" );
68 foreach ( array_keys( $GLOBALS ) as $varName ) {
69 eval( sprintf( 'global $%s;', $varName ) );
72 # Load composer's autoloader if present
73 if ( is_readable( "$IP/vendor/autoload.php" ) ) {
74 require_once "$IP/vendor/autoload.php";
77 if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
78 # Use a callback function to configure MediaWiki
79 call_user_func( MW_CONFIG_CALLBACK
);
81 // Require the configuration (probably LocalSettings.php)
82 require $maintenance->loadSettings();
85 if ( $maintenance->getDbType() === Maintenance
::DB_NONE
) {
87 $wgLocalisationCacheConf['storeClass'] === false
89 $wgLocalisationCacheConf['store'] == 'db'
90 ||
( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory )
93 $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
97 $maintenance->finalSetup();
99 $requireOnceGlobalsScope( "$IP/includes/Setup.php" );
101 // Initialize main config instance
102 $maintenance->setConfig( MediaWikiServices
::getInstance()->getMainConfig() );
104 // Sanity-check required extensions are installed
105 $maintenance->checkRequiredExtensions();
107 // A good time when no DBs have writes pending is around lag checks.
108 // This avoids having long running scripts just OOM and lose all the updates.
109 $maintenance->setAgentAndTriggers();